In a typical data processing system, multiple processes or threads may be executed simultaneously and these processes may compete for exclusive access of a particular resource such as a file or database. A single thread possesses a particular lock for exclusive access of a particular resource at a time. Different threads may vie for ownership of the lock. These threads may have different priorities assigned to them by the system. Typically, threads servicing immediate user instigated actions have higher priorities than long running background tasks. After a thread has won ownership of the lock and begun executing within the critical session, it typically cannot have its ownership preempted. Even if such a thread is the highest priority thread at the time it acquired the lock, an even higher priority thread may come later and become blocked. As a result, the higher priority thread has to wait for the lower priority thread to finish its current transactional operations and release the lock. This sort of priority inversion can result in reduced overall user responsiveness and/or performance.